//
// StoreNuke.Net -  http://www.storenuke.net
// Copyright (c) 2005
// by Robert J Collins ( info@storenuke.net ) of WillowTree Software, Inc. ( http://www.willowtreesoftware.com )
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions 
// of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
// DEALINGS IN THE SOFTWARE.
//

using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace StoreNuke.StarterKit.Commerce
{
	/// <summary>
	/// Summary description for StoreControlsDB.
	/// </summary>
	public class StoreControlsDB
	{
		//*******************************************************
		//
		// Store.GetStoreControl() Method <a name="GetStoreControl"></a>
		//
		// The GetProducts method returns a struct containing a forward-only,
		// read-only DataReader. This displays a Control within a specified
		// Store Control.  The SQLDataReaderResult struct also returns the
		// SQL connection, which must be explicitly closed after the
		// data from the DataReader is bound into the controls.
		//
		//
		//*******************************************************

		public string GetStoreControl(int storeControlID) 
		{

			// Create Instance of Connection and Command Object
			SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand myCommand = new SqlCommand("StoreNuke_GetStoreControl", myConnection);

			// Mark the Command as a SPROC
			myCommand.CommandType = CommandType.StoredProcedure;

			// Add Parameters to SPROC
			SqlParameter parameterStoreControlID = new SqlParameter("@StoreControlID", SqlDbType.Int, 4);
			parameterStoreControlID.Value = storeControlID;
			myCommand.Parameters.Add(parameterStoreControlID);

			// Execute the command
			myConnection.Open();
			SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

			string storeControlPath = "";
            
			// Return the datareader result
			if(result.Read())
			{
				storeControlPath = result["StoreControlPath"].ToString();;
			}
			result.Close();

			return storeControlPath;
		}

		public string GetStoreControlAdmin(int storeControlID) 
		{

			// Create Instance of Connection and Command Object
			SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand myCommand = new SqlCommand("StoreNuke_GetStoreControl", myConnection);

			// Mark the Command as a SPROC
			myCommand.CommandType = CommandType.StoredProcedure;

			// Add Parameters to SPROC
			SqlParameter parameterStoreControlID = new SqlParameter("@StoreControlID", SqlDbType.Int, 4);
			parameterStoreControlID.Value = storeControlID;
			myCommand.Parameters.Add(parameterStoreControlID);

			// Execute the command
			myConnection.Open();
			SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

			string storeControlPath = "";
            
			// Return the datareader result
			if(result.Read())
			{
				storeControlPath = result["StoreControlAdminPath"].ToString();;
			}
			result.Close();

			return storeControlPath;
		}

		public SqlDataReader GetStoreControlInfo(int storeControlID) 
		{
			// Create Instance of Connection and Command Object
			SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand myCommand = new SqlCommand("StoreNuke_GetStoreControl", myConnection);

			// Mark the Command as a SPROC
			myCommand.CommandType = CommandType.StoredProcedure;

			// Add Parameters to SPROC
			SqlParameter parameterStoreControlID = new SqlParameter("@StoreControlID", SqlDbType.Int, 4);
			parameterStoreControlID.Value = storeControlID;
			myCommand.Parameters.Add(parameterStoreControlID);

			// Execute the command
			myConnection.Open();
			SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
            
			// Return the datareader result
			return result;
		}

		public SqlDataReader GetStoreControlSettingsData(int storeControlID) 
		{
			// Create Instance of Connection and Command Object
			SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand myCommand = new SqlCommand("StoreNuke_GetStoreControlSettings", myConnection);

			// Mark the Command as a SPROC
			myCommand.CommandType = CommandType.StoredProcedure;

			// Add Parameters to SPROC
			SqlParameter parameterStoreControlID = new SqlParameter("@StoreControlID", SqlDbType.Int, 4);
			parameterStoreControlID.Value = storeControlID;
			myCommand.Parameters.Add(parameterStoreControlID);

			// Execute the command
			myConnection.Open();
			SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
            
			// Return the datareader result
			return result;
		}

		public Hashtable GetStoreControlSettings(int StoreControlID) 
		{ 
			Hashtable h = new Hashtable(); 

				IDataReader dr = GetStoreControlSettingsData(StoreControlID); 
				while (dr.Read()) 
				{ 
					if (!(dr.IsDBNull(1))) 
					{ 
						h.Add(dr.GetString(0), dr.GetString(1)); 
					} 
					else 
					{ 
						h.Add(dr.GetString(0), ""); 
					} 
				} 
				dr.Close(); 
			return h; 
		}

		public void AddUpateStoreControlSettings(int StoreControlID,string SettingName, string SettingValue) 
		{
			// Create Instance of Connection and Command Object
			SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand myCommand = new SqlCommand("StoreNuke_AddUpateStoreControlSettings", myConnection);

			// Mark the Command as a SPROC
			myCommand.CommandType = CommandType.StoredProcedure;

			// Add Parameters to SPROC
			SqlParameter parameterStoreControlID = new SqlParameter("@StoreControlID", SqlDbType.Int, 4);
			parameterStoreControlID.Value = StoreControlID;
			myCommand.Parameters.Add(parameterStoreControlID);
			
			SqlParameter parameterSettingName = new SqlParameter("@SettingName", SqlDbType.NVarChar, 50);
			parameterSettingName.Value = SettingName;
			myCommand.Parameters.Add(parameterSettingName);
			
			SqlParameter parameterSettingValue = new SqlParameter("@SettingValue", SqlDbType.NVarChar, 4000);
			parameterSettingValue.Value = SettingValue;
			myCommand.Parameters.Add(parameterSettingValue);

			// Open the connection and execute the Command
			myConnection.Open();
			myCommand.ExecuteNonQuery();
			myConnection.Close();
		}
	}
}
